//
// Created by Eugeny Grishul
//
// See license at http://bamelg.com/license.txt
//

using System;
using System.Runtime.InteropServices;

using Platform.X;

namespace Platform.Cairo {
	[ExternLibrary( Image = "/usr/lib64/libcairo.so.2" )]
	public static partial struct CairoApi {
		public extern static void cairo_append_path( cairo_t* cr, cairo_path* path );
		public extern static void cairo_arc( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 );
		public extern static void cairo_arc_negative( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 );
		public extern static void cairo_clip( cairo_t* cr );
		public extern static void cairo_clip_extents( cairo_t* cr, double& x1, double& y1, double& x2, double& y2 );
		public extern static void cairo_clip_preserve( cairo_t* cr );
		public extern static void cairo_close_path( cairo_t* cr );
		public extern static cairo_rectangle_list_t* cairo_copy_clip_rectangle_list( cairo_t* cr );
		public extern static void cairo_copy_page( cairo_t* cr );
		public extern static cairo_path* cairo_copy_path( cairo_t* cr );
		public extern static cairo_path* cairo_copy_path_flat( cairo_t* cr );
		public extern static cairo_t* cairo_create( cairo_surface_t* target );
		public extern static void cairo_curve_to( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 );
		public extern static void cairo_debug_reset_static_data();
		public extern static void cairo_destroy( cairo_t* cr );
		public extern static cairo_status_t cairo_device_acquire( cairo_device_t* device );
		public extern static void cairo_device_destroy( cairo_device_t* device );
		public extern static void cairo_device_finish( cairo_device_t* device );
		public extern static void cairo_device_flush( cairo_device_t* device );
		public extern static uint cairo_device_get_reference_count( cairo_device_t* device );
		public extern static cairo_device_type_t cairo_device_get_type( cairo_device_t* device );
		public extern static void* cairo_device_get_user_data( cairo_device_t* device, cairo_user_data_key_t* key );
		public extern static double cairo_device_observer_elapsed( cairo_device_t* device );
		public extern static double cairo_device_observer_fill_elapsed( cairo_device_t* device );
		public extern static double cairo_device_observer_glyphs_elapsed( cairo_device_t* device );
		public extern static double cairo_device_observer_mask_elapsed( cairo_device_t* device );
		public extern static double cairo_device_observer_paint_elapsed( cairo_device_t* device );
		public extern static cairo_status_t cairo_device_observer_print( cairo_device_t* device, Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure );
		public extern static double cairo_device_observer_stroke_elapsed( cairo_device_t* device );
		public extern static cairo_device_t* cairo_device_reference( cairo_device_t* device );
		public extern static void cairo_device_release( cairo_device_t* device );
		public extern static cairo_status_t cairo_device_set_user_data( cairo_device_t* device, cairo_user_data_key_t* key, void* userData, Functors.Action<void*> destroy );
		public extern static cairo_status_t cairo_device_status( cairo_device_t* device );
		public extern static void cairo_device_to_user( cairo_t* cr, double* x, double* y );
		public extern static void cairo_device_to_user_distance( cairo_t* cr, double* dx, double* dy );
		public extern static void cairo_fill( cairo_t* cr );
		public extern static void cairo_fill_extents( cairo_t* cr, double& x1, double& y1, double& x2, double& y2 );
		public extern static void cairo_fill_preserve( cairo_t* cr );
		public extern static void cairo_font_extents( cairo_t* cr, cairo_font_extents_t* extents );
		public extern static void cairo_font_face_destroy( cairo_font_face_t* fontFace );
		public extern static uint cairo_font_face_get_reference_count( cairo_font_face_t* fontFace );
		public extern static cairo_font_type_t cairo_font_face_get_type( cairo_font_face_t* fontFace );
		public extern static void* cairo_font_face_get_user_data( cairo_font_face_t* fontFace, cairo_user_data_key_t& key );
		public extern static cairo_font_face_t* cairo_font_face_reference( cairo_font_face_t* fontFace );
		public extern static cairo_status_t cairo_font_face_set_user_data( cairo_font_face_t* fontFace, cairo_user_data_key_t& key, void* userData, Functors.Action<void*> destroy );
		public extern static cairo_status_t cairo_font_face_status( cairo_font_face_t* fontFace );
		public extern static cairo_font_options_t* cairo_font_options_copy( cairo_font_options_t* original );
		public extern static cairo_font_options_t* cairo_font_options_create();
		public extern static void cairo_font_options_destroy( cairo_font_options_t* options );
		public extern static Boolean32 cairo_font_options_equal( cairo_font_options_t* options, cairo_font_options_t* other );
		public extern static cairo_antialias_t cairo_font_options_get_antialias( cairo_font_options_t* options );
		public extern static cairo_hint_metrics_t cairo_font_options_get_hint_metrics( cairo_font_options_t* options );
		public extern static cairo_hint_style_t cairo_font_options_get_hint_style( cairo_font_options_t* options );
		public extern static cairo_subpixel_order_t cairo_font_options_get_subpixel_order( cairo_font_options_t* options );
		public extern static sbyte* cairo_font_options_get_variations( cairo_font_options_t* options );
		public extern static uintptr cairo_font_options_hash( cairo_font_options_t* options );
		public extern static void cairo_font_options_merge( cairo_font_options_t* options, cairo_font_options_t* other );
		public extern static void cairo_font_options_set_antialias( cairo_font_options_t* options, cairo_antialias_t antialias );
		public extern static void cairo_font_options_set_hint_metrics( cairo_font_options_t* options, cairo_hint_metrics_t hintMetrics );
		public extern static void cairo_font_options_set_hint_style( cairo_font_options_t* options, cairo_hint_style_t hintStyle );
		public extern static void cairo_font_options_set_subpixel_order( cairo_font_options_t* options, cairo_subpixel_order_t subpixelOrder );
		public extern static void cairo_font_options_set_variations( cairo_font_options_t* options, sbyte* variations );
		public extern static cairo_status_t cairo_font_options_status( cairo_font_options_t* options );
		public extern static int cairo_format_stride_for_width( cairo_format_t format, int width );
		public extern static cairo_antialias_t cairo_get_antialias( cairo_t* cr );
		public extern static void cairo_get_current_point( cairo_t* cr, double& x, double& y );
		public extern static void cairo_get_dash( cairo_t* cr, double* dashes, double& offset );
		public extern static int cairo_get_dash_count( cairo_t* cr );
		public extern static cairo_fill_rule_t cairo_get_fill_rule( cairo_t* cr );
		public extern static cairo_font_face_t* cairo_get_font_face( cairo_t* cr );
		public extern static void cairo_get_font_matrix( cairo_t* cr, cairo_matrix_t& matrix );
		public extern static void cairo_get_font_options( cairo_t* cr, cairo_font_options_t* options );
		public extern static cairo_surface_t* cairo_get_group_target( cairo_t* cr );
		public extern static cairo_line_cap_t cairo_get_line_cap( cairo_t* cr );
		public extern static cairo_line_join_t cairo_get_line_join( cairo_t* cr );
		public extern static double cairo_get_line_width( cairo_t* cr );
		public extern static void cairo_get_matrix( cairo_t* cr, cairo_matrix_t& matrix );
		public extern static double cairo_get_miter_limit( cairo_t* cr );
		public extern static cairo_operator_t cairo_get_operator( cairo_t* cr );
		public extern static uint cairo_get_reference_count( cairo_t* cr );
		public extern static cairo_scaled_font_t* cairo_get_scaled_font( cairo_t* cr );
		public extern static cairo_pattern_t* cairo_get_source( cairo_t* cr );
		public extern static cairo_surface_t* cairo_get_target( cairo_t* cr );
		public extern static double cairo_get_tolerance( cairo_t* cr );
		public extern static void* cairo_get_user_data( cairo_t* cr, cairo_user_data_key_t& key );
		public extern static cairo_glyph_t* cairo_glyph_allocate( int numGlyphs );
		public extern static void cairo_glyph_extents( cairo_t* cr, cairo_glyph_t* glyphs, int numGlyphs, cairo_text_extents_t& extents );
		public extern static void cairo_glyph_free( cairo_glyph_t* glyphs );
		public extern static void cairo_glyph_path( cairo_t* cr, cairo_glyph_t* glyphs, int numGlyphs );
		public extern static Boolean32 cairo_has_current_point( cairo_t* cr );
		public extern static void cairo_identity_matrix( cairo_t* cr );
		public extern static cairo_surface_t* cairo_image_surface_create( cairo_format_t format, int width, int height );
		public extern static cairo_surface_t* cairo_image_surface_create_for_data( byte* data, cairo_format_t format, int width, int height, int stride );
		public extern static cairo_surface_t* cairo_image_surface_create_from_png( CUtf8String filename );
		public extern static cairo_surface_t* cairo_image_surface_create_from_png_stream( Functors.Func<void*, byte*, uint, cairo_status_t> readFunc, void* closure );
		public extern static byte* cairo_image_surface_get_data( cairo_surface_t* surface );
		public extern static cairo_format_t cairo_image_surface_get_format( cairo_surface_t* surface );
		public extern static int cairo_image_surface_get_height( cairo_surface_t* surface );
		public extern static int cairo_image_surface_get_stride( cairo_surface_t* surface );
		public extern static int cairo_image_surface_get_width( cairo_surface_t* surface );
		public extern static Boolean32 cairo_in_clip( cairo_t* cr, double x, double y );
		public extern static Boolean32 cairo_in_fill( cairo_t* cr, double x, double y );
		public extern static Boolean32 cairo_in_stroke( cairo_t* cr, double x, double y );
		public extern static void cairo_line_to( cairo_t* cr, double x, double y );
		public extern static void cairo_mask( cairo_t* cr, cairo_pattern_t* pattern );
		public extern static void cairo_mask_surface( cairo_t* cr, cairo_surface_t* surface, double surfaceX, double surfaceY );
		public extern static void cairo_matrix_init( cairo_matrix_t* matrix, double xx, double yx, double xy, double yy, double x0, double y0 );
		public extern static void cairo_matrix_init_identity( cairo_matrix_t* matrix );
		public extern static void cairo_matrix_init_rotate( cairo_matrix_t* matrix, double radians );
		public extern static void cairo_matrix_init_scale( cairo_matrix_t* matrix, double sx, double sy );
		public extern static void cairo_matrix_init_translate( cairo_matrix_t* matrix, double tx, double ty );
		public extern static cairo_status_t cairo_matrix_invert( cairo_matrix_t* matrix );
		public extern static void cairo_matrix_multiply( cairo_matrix_t* result, cairo_matrix_t& a, cairo_matrix_t& b );
		public extern static void cairo_matrix_rotate( cairo_matrix_t* matrix, double radians );
		public extern static void cairo_matrix_scale( cairo_matrix_t* matrix, double sx, double sy );
		public extern static void cairo_matrix_transform_distance( cairo_matrix_t* matrix, double& dx, double& dy );
		public extern static void cairo_matrix_transform_point( cairo_matrix_t* matrix, double& x, double& y );
		public extern static void cairo_matrix_translate( cairo_matrix_t* matrix, double tx, double ty );
		public extern static void cairo_mesh_pattern_begin_patch( cairo_pattern_t* pattern );
		public extern static void cairo_mesh_pattern_curve_to( cairo_pattern_t* pattern, double x1, double y1, double x2, double y2, double x3, double y3 );
		public extern static void cairo_mesh_pattern_end_patch( cairo_pattern_t* pattern );
		public extern static cairo_status_t cairo_mesh_pattern_get_control_point( cairo_pattern_t* pattern, uint patchNum, uint pointNum, double* x, double* y );
		public extern static cairo_status_t cairo_mesh_pattern_get_corner_color_rgba( cairo_pattern_t* pattern, uint patchNum, uint cornerNum, double* red, double* green, double* blue, double* alpha );
		public extern static cairo_status_t cairo_mesh_pattern_get_patch_count( cairo_pattern_t* pattern, uint* count );
		public extern static cairo_path* cairo_mesh_pattern_get_path( cairo_pattern_t* pattern, uint patchNum );
		public extern static void cairo_mesh_pattern_line_to( cairo_pattern_t* pattern, double x, double y );
		public extern static void cairo_mesh_pattern_move_to( cairo_pattern_t* pattern, double x, double y );
		public extern static void cairo_mesh_pattern_set_control_point( cairo_pattern_t* pattern, uint pointNum, double x, double y );
		public extern static void cairo_mesh_pattern_set_corner_color_rgb( cairo_pattern_t* pattern, uint cornerNum, double red, double green, double blue );
		public extern static void cairo_mesh_pattern_set_corner_color_rgba( cairo_pattern_t* pattern, uint cornerNum, double red, double green, double blue, double alpha );
		public extern static void cairo_move_to( cairo_t* cr, double x, double y );
		public extern static void cairo_new_path( cairo_t* cr );
		public extern static void cairo_new_sub_path( cairo_t* cr );
		public extern static void cairo_paint( cairo_t* cr );
		public extern static void cairo_paint_with_alpha( cairo_t* cr, double alpha );
		public extern static void cairo_path_destroy( cairo_path* path );
		public extern static void cairo_path_extents( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 );
		public extern static void cairo_pattern_add_color_stop_rgb( cairo_pattern_t* pattern, double offset, double red, double green, double blue );
		public extern static void cairo_pattern_add_color_stop_rgba( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha );
		public extern static cairo_pattern_t* cairo_pattern_create_for_surface( cairo_surface_t* surface );
		public extern static cairo_pattern_t* cairo_pattern_create_linear( double x0, double y0, double x1, double y1 );
		public extern static cairo_pattern_t* cairo_pattern_create_mesh();
		public extern static cairo_pattern_t* cairo_pattern_create_radial( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 );
		public extern static cairo_pattern_t* cairo_pattern_create_raster_source( void* userData, cairo_content_t content, int width, int height );
		public extern static cairo_pattern_t* cairo_pattern_create_rgb( double red, double green, double blue );
		public extern static cairo_pattern_t* cairo_pattern_create_rgba( double red, double green, double blue, double alpha );
		public extern static void cairo_pattern_destroy( cairo_pattern_t* pattern );
		public extern static cairo_status_t cairo_pattern_get_color_stop_count( cairo_pattern_t* pattern, int* count );
		public extern static cairo_status_t cairo_pattern_get_color_stop_rgba( cairo_pattern_t* pattern, int index, double& offset, double& red, double& green, double& blue, double& alpha );
		public extern static cairo_extend_t cairo_pattern_get_extend( cairo_pattern_t* pattern );
		public extern static cairo_filter_t cairo_pattern_get_filter( cairo_pattern_t* pattern );
		public extern static cairo_status_t cairo_pattern_get_linear_points( cairo_pattern_t* pattern, double& x0, double& y0, double& x1, double& y1 );
		public extern static void cairo_pattern_get_matrix( cairo_pattern_t* pattern, cairo_matrix_t& matrix );
		public extern static cairo_status_t cairo_pattern_get_radial_circles( cairo_pattern_t* pattern, double& x0, double& y0, double& r0, double& x1, double& y1, double& r1 );
		public extern static uint cairo_pattern_get_reference_count( cairo_pattern_t* pattern );
		public extern static cairo_status_t cairo_pattern_get_rgba( cairo_pattern_t* pattern, double& red, double& green, double& blue, double& alpha );
		public extern static cairo_status_t cairo_pattern_get_surface( cairo_pattern_t* pattern, cairo_surface_t*& surface );
		public extern static cairo_pattern_type_t cairo_pattern_get_type( cairo_pattern_t* pattern );
		public extern static void* cairo_pattern_get_user_data( cairo_pattern_t* pattern, cairo_user_data_key_t& key );
		public extern static cairo_pattern_t* cairo_pattern_reference( cairo_pattern_t* pattern );
		public extern static void cairo_pattern_set_extend( cairo_pattern_t* pattern, cairo_extend_t extend );
		public extern static void cairo_pattern_set_filter( cairo_pattern_t* pattern, cairo_filter_t filter );
		public extern static void cairo_pattern_set_matrix( cairo_pattern_t* pattern, cairo_matrix_t& matrix );
		public extern static cairo_status_t cairo_pattern_set_user_data( cairo_pattern_t* pattern, cairo_user_data_key_t& key, void* userData, Functors.Action<void*> destroy );
		public extern static cairo_status_t cairo_pattern_status( cairo_pattern_t* pattern );
		public extern static cairo_pattern_t* cairo_pop_group( cairo_t* cr );
		public extern static void cairo_pop_group_to_source( cairo_t* cr );
		public extern static void cairo_push_group( cairo_t* cr );
		public extern static void cairo_push_group_with_content( cairo_t* cr, cairo_content_t content );
		public extern static void cairo_raster_source_pattern_get_acquire( cairo_pattern_t* pattern, Functors.Func<cairo_pattern_t*, void*, cairo_surface_t*, cairo_rectangle_int_t*, cairo_surface_t*>* acquire, Functors.Action<cairo_pattern_t*, void*, cairo_surface_t*>* release );
		public extern static void* cairo_raster_source_pattern_get_callback_data( cairo_pattern_t* pattern );
		public extern static Functors.Func<cairo_pattern_t*, void*, cairo_pattern_t*, cairo_status_t> cairo_raster_source_pattern_get_copy( cairo_pattern_t* pattern );
		public extern static Functors.Action<cairo_pattern_t*, void*> cairo_raster_source_pattern_get_finish( cairo_pattern_t* pattern );
		public extern static Functors.Func<cairo_pattern_t*, void*, cairo_status_t> cairo_raster_source_pattern_get_snapshot( cairo_pattern_t* pattern );
		public extern static void cairo_raster_source_pattern_set_acquire( cairo_pattern_t* pattern, Functors.Func<cairo_pattern_t*, void*, cairo_surface_t*, cairo_rectangle_int_t*, cairo_surface_t*> acquire, Functors.Action<cairo_pattern_t*, void*, cairo_surface_t*> release );
		public extern static void cairo_raster_source_pattern_set_callback_data( cairo_pattern_t* pattern, void* data );
		public extern static void cairo_raster_source_pattern_set_copy( cairo_pattern_t* pattern, Functors.Func<cairo_pattern_t*, void*, cairo_pattern_t*, cairo_status_t> copy );
		public extern static void cairo_raster_source_pattern_set_finish( cairo_pattern_t* pattern, Functors.Action<cairo_pattern_t*, void*> finish );
		public extern static void cairo_raster_source_pattern_set_snapshot( cairo_pattern_t* pattern, Functors.Func<cairo_pattern_t*, void*, cairo_status_t> snapshot );
		public extern static cairo_surface_t* cairo_recording_surface_create( cairo_content_t content, cairo_rectangle_t* extents );
		public extern static Boolean32 cairo_recording_surface_get_extents( cairo_surface_t* surface, cairo_rectangle_t* extents );
		public extern static void cairo_recording_surface_ink_extents( cairo_surface_t* surface, double* x0, double* y0, double* width, double* height );
		public extern static void cairo_rectangle( cairo_t* cr, double x, double y, double width, double height );
		public extern static void cairo_rectangle_list_destroy( cairo_rectangle_list_t* rectangleList );
		public extern static cairo_t* cairo_reference( cairo_t* cr );
		public extern static Boolean32 cairo_region_contains_point( cairo_region_t* region, int x, int y );
		public extern static cairo_region_overlap_t cairo_region_contains_rectangle( cairo_region_t* region, cairo_rectangle_int_t* rectangle );
		public extern static cairo_region_t* cairo_region_copy( cairo_region_t* original );
		public extern static cairo_region_t* cairo_region_create();
		public extern static cairo_region_t* cairo_region_create_rectangle( cairo_rectangle_int_t* rectangle );
		public extern static cairo_region_t* cairo_region_create_rectangles( cairo_rectangle_int_t* rects, int count );
		public extern static void cairo_region_destroy( cairo_region_t* region );
		public extern static Boolean32 cairo_region_equal( cairo_region_t* a, cairo_region_t* b );
		public extern static void cairo_region_get_extents( cairo_region_t* region, cairo_rectangle_int_t* extents );
		public extern static void cairo_region_get_rectangle( cairo_region_t* region, int nth, cairo_rectangle_int_t* rectangle );
		public extern static cairo_status_t cairo_region_intersect( cairo_region_t* dst, cairo_region_t* other );
		public extern static cairo_status_t cairo_region_intersect_rectangle( cairo_region_t* dst, cairo_rectangle_int_t* rectangle );
		public extern static Boolean32 cairo_region_is_empty( cairo_region_t* region );
		public extern static int cairo_region_num_rectangles( cairo_region_t* region );
		public extern static cairo_region_t* cairo_region_reference( cairo_region_t* region );
		public extern static cairo_status_t cairo_region_status( cairo_region_t* region );
		public extern static cairo_status_t cairo_region_subtract( cairo_region_t* dst, cairo_region_t* other );
		public extern static cairo_status_t cairo_region_subtract_rectangle( cairo_region_t* dst, cairo_rectangle_int_t* rectangle );
		public extern static void cairo_region_translate( cairo_region_t* region, int dx, int dy );
		public extern static cairo_status_t cairo_region_union( cairo_region_t* dst, cairo_region_t* other );
		public extern static cairo_status_t cairo_region_union_rectangle( cairo_region_t* dst, cairo_rectangle_int_t* rectangle );
		public extern static cairo_status_t cairo_region_xor( cairo_region_t* dst, cairo_region_t* other );
		public extern static cairo_status_t cairo_region_xor_rectangle( cairo_region_t* dst, cairo_rectangle_int_t* rectangle );
		public extern static void cairo_rel_curve_to( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 );
		public extern static void cairo_rel_line_to( cairo_t* cr, double dx, double dy );
		public extern static void cairo_rel_move_to( cairo_t* cr, double dx, double dy );
		public extern static void cairo_reset_clip( cairo_t* cr );
		public extern static void cairo_restore( cairo_t* cr );
		public extern static void cairo_rotate( cairo_t* cr, double angle );
		public extern static void cairo_save( cairo_t* cr );
		public extern static void cairo_scale( cairo_t* cr, double sx, double sy );
		public extern static cairo_scaled_font_t* cairo_scaled_font_create( cairo_font_face_t* fontFace, cairo_matrix_t* fontMatrix, cairo_matrix_t* ctm, cairo_font_options_t* options );
		public extern static void cairo_scaled_font_destroy( cairo_scaled_font_t* scaledFont );
		public extern static void cairo_scaled_font_extents( cairo_scaled_font_t* scaledFont, cairo_font_extents_t* extents );
		public extern static void cairo_scaled_font_get_ctm( cairo_scaled_font_t* scaledFont, cairo_matrix_t& ctm );
		public extern static cairo_font_face_t* cairo_scaled_font_get_font_face( cairo_scaled_font_t* scaledFont );
		public extern static void cairo_scaled_font_get_font_matrix( cairo_scaled_font_t* scaledFont, cairo_matrix_t& fontMatrix );
		public extern static void cairo_scaled_font_get_font_options( cairo_scaled_font_t* scaledFont, cairo_font_options_t* options );
		public extern static uint cairo_scaled_font_get_reference_count( cairo_scaled_font_t* scaledFont );
		public extern static void cairo_scaled_font_get_scale_matrix( cairo_scaled_font_t* scaledFont, cairo_matrix_t* scaleMatrix );
		public extern static cairo_font_type_t cairo_scaled_font_get_type( cairo_scaled_font_t* scaledFont );
		public extern static void* cairo_scaled_font_get_user_data( cairo_scaled_font_t* scaledFont, cairo_user_data_key_t& key );
		public extern static void cairo_scaled_font_glyph_extents( cairo_scaled_font_t* scaledFont, cairo_glyph_t* glyphs, int numGlyphs, cairo_text_extents_t& extents );
		public extern static cairo_scaled_font_t* cairo_scaled_font_reference( cairo_scaled_font_t* scaledFont );
		public extern static cairo_status_t cairo_scaled_font_set_user_data( cairo_scaled_font_t* scaledFont, cairo_user_data_key_t& key, void* userData, Functors.Action<void*> destroy );
		public extern static cairo_status_t cairo_scaled_font_status( cairo_scaled_font_t* scaledFont );
		public extern static void cairo_scaled_font_text_extents( cairo_scaled_font_t* scaledFont, CUtf8String utf8, cairo_text_extents_t& extents );
		public extern static cairo_status_t cairo_scaled_font_text_to_glyphs( cairo_scaled_font_t* scaledFont, double x, double y, sbyte* utf8, int utf8Len, cairo_glyph_t** glyphs, int* numGlyphs, cairo_text_cluster_t** clusters, int* numClusters, cairo_text_cluster_flags_t* clusterFlags );
		public extern static void cairo_select_font_face( cairo_t* cr, CUtf8String family, cairo_font_slant_t slant, cairo_font_weight_t weight );
		public extern static void cairo_set_antialias( cairo_t* cr, cairo_antialias_t antialias );
		public extern static void cairo_set_dash( cairo_t* cr, double* dashes, uint numDashes, double offset );
		public extern static void cairo_set_fill_rule( cairo_t* cr, cairo_fill_rule_t fillRule );
		public extern static void cairo_set_font_face( cairo_t* cr, cairo_font_face_t* fontFace );
		public extern static void cairo_set_font_matrix( cairo_t* cr, cairo_matrix_t& matrix );
		public extern static void cairo_set_font_options( cairo_t* cr, cairo_font_options_t* options );
		public extern static void cairo_set_font_size( cairo_t* cr, double size );
		public extern static void cairo_set_line_cap( cairo_t* cr, cairo_line_cap_t lineCap );
		public extern static void cairo_set_line_join( cairo_t* cr, cairo_line_join_t lineJoin );
		public extern static void cairo_set_line_width( cairo_t* cr, double width );
		public extern static void cairo_set_matrix( cairo_t* cr, cairo_matrix_t& matrix );
		public extern static void cairo_set_miter_limit( cairo_t* cr, double limit );
		public extern static void cairo_set_operator( cairo_t* cr, cairo_operator_t op );
		public extern static void cairo_set_scaled_font( cairo_t* cr, cairo_scaled_font_t* scaledFont );
		public extern static void cairo_set_source( cairo_t* cr, cairo_pattern_t* source );
		public extern static void cairo_set_source_rgb( cairo_t* cr, double red, double green, double blue );
		public extern static void cairo_set_source_rgba( cairo_t* cr, double red, double green, double blue, double alpha );
		public extern static void cairo_set_source_surface( cairo_t* cr, cairo_surface_t* surface, double x, double y );
		public extern static void cairo_set_tolerance( cairo_t* cr, double tolerance );
		public extern static cairo_status_t cairo_set_user_data( cairo_t* cr, cairo_user_data_key_t& key, void* userData, Functors.Action<void*> destroy );
		public extern static void cairo_show_glyphs( cairo_t* cr, cairo_glyph_t* glyphs, int numGlyphs );
		public extern static void cairo_show_page( cairo_t* cr );
		public extern static void cairo_show_text( cairo_t* cr, CUtf8String utf8 );
		public extern static void cairo_show_text_glyphs( cairo_t* cr, CUtf8String utf8, int utf8Len, cairo_glyph_t* glyphs, int numGlyphs, cairo_text_cluster_t* clusters, int numClusters, cairo_text_cluster_flags_t clusterFlags );
		public extern static cairo_status_t cairo_status( cairo_t* cr );
		public extern static CUtf8String cairo_status_to_string( cairo_status_t status );
		public extern static void cairo_stroke( cairo_t* cr );
		public extern static void cairo_stroke_extents( cairo_t* cr, double& x1, double& y1, double& x2, double& y2 );
		public extern static void cairo_stroke_preserve( cairo_t* cr );
		public extern static void cairo_surface_copy_page( cairo_surface_t* surface );
		public extern static cairo_surface_t* cairo_surface_create_for_rectangle( cairo_surface_t* target, double x, double y, double width, double height );
		public extern static cairo_surface_t* cairo_surface_create_observer( cairo_surface_t* target, cairo_surface_observer_mode_t mode );
		public extern static cairo_surface_t* cairo_surface_create_similar( cairo_surface_t* other, cairo_content_t content, int width, int height );
		public extern static cairo_surface_t* cairo_surface_create_similar_image( cairo_surface_t* other, cairo_format_t format, int width, int height );
		public extern static void cairo_surface_destroy( cairo_surface_t* surface );
		public extern static void cairo_surface_finish( cairo_surface_t* surface );
		public extern static void cairo_surface_flush( cairo_surface_t* surface );
		public extern static cairo_content_t cairo_surface_get_content( cairo_surface_t* surface );
		public extern static cairo_device_t* cairo_surface_get_device( cairo_surface_t* surface );
		public extern static void cairo_surface_get_device_offset( cairo_surface_t* surface, double& xOffset, double& yOffset );
		public extern static void cairo_surface_get_device_scale( cairo_surface_t* surface, double* xScale, double* yScale );
		public extern static void cairo_surface_get_fallback_resolution( cairo_surface_t* surface, double* xPixelsPerInch, double* yPixelsPerInch );
		public extern static void cairo_surface_get_font_options( cairo_surface_t* surface, cairo_font_options_t* options );
		public extern static void cairo_surface_get_mime_data( cairo_surface_t* surface, sbyte* mimeType, byte** data, uintptr* length );
		public extern static uint cairo_surface_get_reference_count( cairo_surface_t* surface );
		public extern static cairo_surface_type_t cairo_surface_get_type( cairo_surface_t* surface );
		public extern static void* cairo_surface_get_user_data( cairo_surface_t* surface, cairo_user_data_key_t& key );
		public extern static Boolean32 cairo_surface_has_show_text_glyphs( cairo_surface_t* surface );
		public extern static cairo_surface_t* cairo_surface_map_to_image( cairo_surface_t* surface, cairo_rectangle_int_t* extents );
		public extern static void cairo_surface_mark_dirty( cairo_surface_t* surface );
		public extern static void cairo_surface_mark_dirty_rectangle( cairo_surface_t* surface, int x, int y, int width, int height );
		public extern static cairo_status_t cairo_surface_observer_add_fill_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_finish_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_flush_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_glyphs_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_mask_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_paint_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static cairo_status_t cairo_surface_observer_add_stroke_callback( cairo_surface_t* abstractSurface, Functors.Action<cairo_surface_t*, cairo_surface_t*, void*> func, void* data );
		public extern static double cairo_surface_observer_elapsed( cairo_surface_t* surface );
		public extern static cairo_status_t cairo_surface_observer_print( cairo_surface_t* surface, Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure );
		public extern static cairo_surface_t* cairo_surface_reference( cairo_surface_t* surface );
		public extern static void cairo_surface_set_device_offset( cairo_surface_t* surface, double xOffset, double yOffset );
		public extern static void cairo_surface_set_device_scale( cairo_surface_t* surface, double xScale, double yScale );
		public extern static void cairo_surface_set_fallback_resolution( cairo_surface_t* surface, double xPixelsPerInch, double yPixelsPerInch );
		public extern static cairo_status_t cairo_surface_set_mime_data( cairo_surface_t* surface, sbyte* mimeType, byte* data, uintptr length, Functors.Action<void*> destroy, void* closure );
		public extern static cairo_status_t cairo_surface_set_user_data( cairo_surface_t* surface, cairo_user_data_key_t& key, void* userData, Functors.Action<void*> destroy );
		public extern static void cairo_surface_show_page( cairo_surface_t* surface );
		public extern static cairo_status_t cairo_surface_status( cairo_surface_t* surface );
		public extern static Boolean32 cairo_surface_supports_mime_type( cairo_surface_t* surface, sbyte* mimeType );
		public extern static void cairo_surface_unmap_image( cairo_surface_t* surface, cairo_surface_t* image );
		public extern static cairo_status_t cairo_surface_write_to_png( cairo_surface_t* surface, CUtf8String filename );
		public extern static cairo_status_t cairo_surface_write_to_png_stream( cairo_surface_t* surface, Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure );
		public extern static void cairo_tag_begin( cairo_t* cr, CUtf8String tagName, sbyte* attributes );
		public extern static void cairo_tag_end( cairo_t* cr, CUtf8String tagName );
		public extern static cairo_text_cluster_t* cairo_text_cluster_allocate( int numClusters );
		public extern static void cairo_text_cluster_free( cairo_text_cluster_t* clusters );
		public extern static void cairo_text_extents( cairo_t* cr, CUtf8String utf8, cairo_text_extents_t& extents );
		public extern static void cairo_text_path( cairo_t* cr, CUtf8String utf8 );
		public extern static cairo_font_face_t* cairo_toy_font_face_create( sbyte* family, cairo_font_slant_t slant, cairo_font_weight_t weight );
		public extern static sbyte* cairo_toy_font_face_get_family( cairo_font_face_t* fontFace );
		public extern static cairo_font_slant_t cairo_toy_font_face_get_slant( cairo_font_face_t* fontFace );
		public extern static cairo_font_weight_t cairo_toy_font_face_get_weight( cairo_font_face_t* fontFace );
		public extern static void cairo_transform( cairo_t* cr, cairo_matrix_t& matrix );
		public extern static void cairo_translate( cairo_t* cr, double tx, double ty );
		public extern static cairo_font_face_t* cairo_user_font_face_create();
		public extern static Functors.Func<cairo_scaled_font_t*, cairo_t*, cairo_font_extents_t*, cairo_status_t> cairo_user_font_face_get_init_func( cairo_font_face_t* fontFace );
		public extern static Functors.Func<cairo_scaled_font_t*, uintptr, cairo_t*, cairo_text_extents_t*, cairo_status_t> cairo_user_font_face_get_render_glyph_func( cairo_font_face_t* fontFace );
		public extern static Functors.Func<cairo_scaled_font_t*, sbyte*, int, cairo_glyph_t**, int*, cairo_text_cluster_t**, int*, cairo_text_cluster_flags_t*, cairo_status_t> cairo_user_font_face_get_text_to_glyphs_func( cairo_font_face_t* fontFace );
		public extern static Functors.Func<cairo_scaled_font_t*, uintptr, uintptr*, cairo_status_t> cairo_user_font_face_get_unicode_to_glyph_func( cairo_font_face_t* fontFace );
		public extern static void cairo_user_font_face_set_init_func( cairo_font_face_t* fontFace, Functors.Func<cairo_scaled_font_t*, cairo_t*, cairo_font_extents_t*, cairo_status_t> initFunc );
		public extern static void cairo_user_font_face_set_render_glyph_func( cairo_font_face_t* fontFace, Functors.Func<cairo_scaled_font_t*, uintptr, cairo_t*, cairo_text_extents_t*, cairo_status_t> renderGlyphFunc );
		public extern static void cairo_user_font_face_set_text_to_glyphs_func( cairo_font_face_t* fontFace, Functors.Func<cairo_scaled_font_t*, sbyte*, int, cairo_glyph_t**, int*, cairo_text_cluster_t**, int*, cairo_text_cluster_flags_t*, cairo_status_t> textToGlyphsFunc );
		public extern static void cairo_user_font_face_set_unicode_to_glyph_func( cairo_font_face_t* fontFace, Functors.Func<cairo_scaled_font_t*, uintptr, uintptr*, cairo_status_t> unicodeToGlyphFunc );
		public extern static void cairo_user_to_device( cairo_t* cr, double& x, double& y );
		public extern static void cairo_user_to_device_distance( cairo_t* cr, double& dx, double& dy );
		public extern static int cairo_version();
		public extern static CUtf8String cairo_version_string();

		public extern static void cairo_ps_get_levels( cairo_ps_level_t** levels, int* numLevels );
		public extern static sbyte* cairo_ps_level_to_string( cairo_ps_level_t level );
		public extern static cairo_surface_t* cairo_ps_surface_create( CUtf8String filename, double widthInPoints, double heightInPoints );
		public extern static cairo_surface_t* cairo_ps_surface_create_for_stream( Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure, double widthInPoints, double heightInPoints );
		public extern static void cairo_ps_surface_dsc_begin_page_setup( cairo_surface_t* surface );
		public extern static void cairo_ps_surface_dsc_begin_setup( cairo_surface_t* surface );
		public extern static void cairo_ps_surface_dsc_comment( cairo_surface_t* surface, CUtf8String comment );
		public extern static Boolean32 cairo_ps_surface_get_eps( cairo_surface_t* surface );
		public extern static void cairo_ps_surface_restrict_to_level( cairo_surface_t* surface, cairo_ps_level_t level );
		public extern static void cairo_ps_surface_set_eps( cairo_surface_t* surface, Boolean32 eps );
		public extern static void cairo_ps_surface_set_size( cairo_surface_t* surface, double widthInPoints, double heightInPoints );

		public extern static void cairo_pdf_get_versions( cairo_pdf_version_t** versions, int* numVersions );
		public extern static int cairo_pdf_surface_add_outline( cairo_surface_t* surface, int parentId, sbyte* utf8, sbyte* linkAttribs, cairo_pdf_outline_flags_t flags );
		public extern static cairo_surface_t* cairo_pdf_surface_create( CUtf8String filename, double widthInPoints, double heightInPoints );
		public extern static cairo_surface_t* cairo_pdf_surface_create_for_stream( Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure, double widthInPoints, double heightInPoints );
		public extern static void cairo_pdf_surface_restrict_to_version( cairo_surface_t* surface, cairo_pdf_version_t version );
		public extern static void cairo_pdf_surface_set_metadata( cairo_surface_t* surface, cairo_pdf_metadata_t metadata, sbyte* utf8 );
		public extern static void cairo_pdf_surface_set_page_label( cairo_surface_t* surface, sbyte* utf8 );
		public extern static void cairo_pdf_surface_set_size( cairo_surface_t* surface, double widthInPoints, double heightInPoints );
		public extern static void cairo_pdf_surface_set_thumbnail_size( cairo_surface_t* surface, int width, int height );
		public extern static sbyte* cairo_pdf_version_to_string( cairo_pdf_version_t version );

		public extern static void cairo_svg_get_versions( cairo_svg_version_t*& versions, int& numVersions );
		public extern static cairo_surface_t* cairo_svg_surface_create( CUtf8String filename, double widthInPoints, double heightInPoints );
		public extern static cairo_surface_t* cairo_svg_surface_create_for_stream( Functors.Func<void*, byte*, uint, cairo_status_t> writeFunc, void* closure, double widthInPoints, double heightInPoints );
		public extern static cairo_svg_unit_t cairo_svg_surface_get_document_unit( cairo_surface_t* surface );
		public extern static void cairo_svg_surface_restrict_to_version( cairo_surface_t* surface, cairo_svg_version_t version );
		public extern static void cairo_svg_surface_set_document_unit( cairo_surface_t* surface, cairo_svg_unit_t unit );
		public extern static CUtf8String cairo_svg_version_to_string( cairo_svg_version_t version );

		public extern static void cairo_xlib_device_debug_cap_xrender_version( cairo_device_t* device, int majorVersion, int minorVersion );
		public extern static int cairo_xlib_device_debug_get_precision( cairo_device_t* device );
		public extern static void cairo_xlib_device_debug_set_precision( cairo_device_t* device, int precision );
		public extern static cairo_surface_t* cairo_xlib_surface_create( Display* dpy, Drawable drawable, Visual* visual, int width, int height );
		public extern static cairo_surface_t* cairo_xlib_surface_create_for_bitmap( Display* dpy, Pixmap bitmap, Screen* screen, int width, int height );
		public extern static int cairo_xlib_surface_get_depth( cairo_surface_t* surface );
		public extern static Display* cairo_xlib_surface_get_display( cairo_surface_t* surface );
		public extern static Drawable cairo_xlib_surface_get_drawable( cairo_surface_t* surface );
		public extern static int cairo_xlib_surface_get_height( cairo_surface_t* surface );
		public extern static Screen* cairo_xlib_surface_get_screen( cairo_surface_t* surface );
		public extern static Visual* cairo_xlib_surface_get_visual( cairo_surface_t* surface );
		public extern static int cairo_xlib_surface_get_width( cairo_surface_t* surface );
		public extern static void cairo_xlib_surface_set_drawable( cairo_surface_t* surface, Drawable drawable, int width, int height );
		public extern static void cairo_xlib_surface_set_size( cairo_surface_t* surface, int width, int height );

		public extern static cairo_surface_t* cairo_xlib_surface_create_with_xrender_format( Display* dpy, Drawable drawable, Screen* screen, XRenderPictFormat* format, int width, int height );
		public extern static XRenderPictFormat* cairo_xlib_surface_get_xrender_format( cairo_surface_t* surface );
	}
	public enum cairo_antialias_t : uint {
		CAIRO_ANTIALIAS_DEFAULT =  0,
		CAIRO_ANTIALIAS_NONE =     1,
		CAIRO_ANTIALIAS_GRAY =     2,
		CAIRO_ANTIALIAS_SUBPIXEL = 3,
		CAIRO_ANTIALIAS_FAST =     4,
		CAIRO_ANTIALIAS_GOOD =     5,
		CAIRO_ANTIALIAS_BEST =     6,
	}
	public enum cairo_content_t : uint {
		CAIRO_CONTENT_COLOR =        4096,
		CAIRO_CONTENT_ALPHA =        8192,
		CAIRO_CONTENT_COLOR_ALPHA = 12288,
	}
	public enum cairo_device_type_t : int {
		CAIRO_DEVICE_TYPE_DRM =      0,
		CAIRO_DEVICE_TYPE_GL =       1,
		CAIRO_DEVICE_TYPE_SCRIPT =   2,
		CAIRO_DEVICE_TYPE_XCB =      3,
		CAIRO_DEVICE_TYPE_XLIB =     4,
		CAIRO_DEVICE_TYPE_XML =      5,
		CAIRO_DEVICE_TYPE_COGL =     6,
		CAIRO_DEVICE_TYPE_WIN32 =    7,
		CAIRO_DEVICE_TYPE_INVALID = -1,
	}
	public enum cairo_extend_t : uint {
		CAIRO_EXTEND_NONE =    0,
		CAIRO_EXTEND_REPEAT =  1,
		CAIRO_EXTEND_REFLECT = 2,
		CAIRO_EXTEND_PAD =     3,
	}
	public enum cairo_fill_rule_t : uint {
		CAIRO_FILL_RULE_WINDING =  0,
		CAIRO_FILL_RULE_EVEN_ODD = 1,
	}
	public enum cairo_filter_t : uint {
		CAIRO_FILTER_FAST =     0,
		CAIRO_FILTER_GOOD =     1,
		CAIRO_FILTER_BEST =     2,
		CAIRO_FILTER_NEAREST =  3,
		CAIRO_FILTER_BILINEAR = 4,
		CAIRO_FILTER_GAUSSIAN = 5,
	}
	public enum cairo_font_slant_t : uint {
		CAIRO_FONT_SLANT_NORMAL =  0,
		CAIRO_FONT_SLANT_ITALIC =  1,
		CAIRO_FONT_SLANT_OBLIQUE = 2,
	}
	public enum cairo_font_type_t : uint {
		CAIRO_FONT_TYPE_TOY =    0,
		CAIRO_FONT_TYPE_FT =     1,
		CAIRO_FONT_TYPE_WIN32 =  2,
		CAIRO_FONT_TYPE_QUARTZ = 3,
		CAIRO_FONT_TYPE_USER =   4,
	}
	public enum cairo_font_weight_t : uint {
		CAIRO_FONT_WEIGHT_NORMAL = 0,
		CAIRO_FONT_WEIGHT_BOLD =   1,
	}
	public enum cairo_format_t : int {
		CAIRO_FORMAT_INVALID =  -1,
		CAIRO_FORMAT_ARGB32 =    0,
		CAIRO_FORMAT_RGB24 =     1,
		CAIRO_FORMAT_A8 =        2,
		CAIRO_FORMAT_A1 =        3,
		CAIRO_FORMAT_RGB16_565 = 4,
		CAIRO_FORMAT_RGB30 =     5,
	}
	public enum cairo_hint_metrics_t : uint {
		CAIRO_HINT_METRICS_DEFAULT = 0,
		CAIRO_HINT_METRICS_OFF =     1,
		CAIRO_HINT_METRICS_ON =      2,
	}
	public enum cairo_hint_style_t : uint {
		CAIRO_HINT_STYLE_DEFAULT = 0,
		CAIRO_HINT_STYLE_NONE =    1,
		CAIRO_HINT_STYLE_SLIGHT =  2,
		CAIRO_HINT_STYLE_MEDIUM =  3,
		CAIRO_HINT_STYLE_FULL =    4,
	}
	public enum cairo_line_cap_t : uint {
		CAIRO_LINE_CAP_BUTT =   0,
		CAIRO_LINE_CAP_ROUND =  1,
		CAIRO_LINE_CAP_SQUARE = 2,
	}
	public enum cairo_line_join_t : uint {
		CAIRO_LINE_JOIN_MITER = 0,
		CAIRO_LINE_JOIN_ROUND = 1,
		CAIRO_LINE_JOIN_BEVEL = 2,
	}
	public enum cairo_operator_t : uint {
		CAIRO_OPERATOR_CLEAR =           0,
		CAIRO_OPERATOR_SOURCE =          1,
		CAIRO_OPERATOR_OVER =            2,
		CAIRO_OPERATOR_IN =              3,
		CAIRO_OPERATOR_OUT =             4,
		CAIRO_OPERATOR_ATOP =            5,
		CAIRO_OPERATOR_DEST =            6,
		CAIRO_OPERATOR_DEST_OVER =       7,
		CAIRO_OPERATOR_DEST_IN =         8,
		CAIRO_OPERATOR_DEST_OUT =        9,
		CAIRO_OPERATOR_DEST_ATOP =      10,
		CAIRO_OPERATOR_XOR =            11,
		CAIRO_OPERATOR_ADD =            12,
		CAIRO_OPERATOR_SATURATE =       13,
		CAIRO_OPERATOR_MULTIPLY =       14,
		CAIRO_OPERATOR_SCREEN =         15,
		CAIRO_OPERATOR_OVERLAY =        16,
		CAIRO_OPERATOR_DARKEN =         17,
		CAIRO_OPERATOR_LIGHTEN =        18,
		CAIRO_OPERATOR_COLOR_DODGE =    19,
		CAIRO_OPERATOR_COLOR_BURN =     20,
		CAIRO_OPERATOR_HARD_LIGHT =     21,
		CAIRO_OPERATOR_SOFT_LIGHT =     22,
		CAIRO_OPERATOR_DIFFERENCE =     23,
		CAIRO_OPERATOR_EXCLUSION =      24,
		CAIRO_OPERATOR_HSL_HUE =        25,
		CAIRO_OPERATOR_HSL_SATURATION = 26,
		CAIRO_OPERATOR_HSL_COLOR =      27,
		CAIRO_OPERATOR_HSL_LUMINOSITY = 28,
	}
	public enum cairo_path_data_type_t : uint {
		CAIRO_PATH_MOVE_TO =    0,
		CAIRO_PATH_LINE_TO =    1,
		CAIRO_PATH_CURVE_TO =   2,
		CAIRO_PATH_CLOSE_PATH = 3,
	}
	public enum cairo_pattern_type_t : uint {
		CAIRO_PATTERN_TYPE_SOLID =         0,
		CAIRO_PATTERN_TYPE_SURFACE =       1,
		CAIRO_PATTERN_TYPE_LINEAR =        2,
		CAIRO_PATTERN_TYPE_RADIAL =        3,
		CAIRO_PATTERN_TYPE_MESH =          4,
		CAIRO_PATTERN_TYPE_RASTER_SOURCE = 5,
	}
	public enum cairo_pdf_metadata_t : uint {
		CAIRO_PDF_METADATA_TITLE =       0,
		CAIRO_PDF_METADATA_AUTHOR =      1,
		CAIRO_PDF_METADATA_SUBJECT =     2,
		CAIRO_PDF_METADATA_KEYWORDS =    3,
		CAIRO_PDF_METADATA_CREATOR =     4,
		CAIRO_PDF_METADATA_CREATE_DATE = 5,
		CAIRO_PDF_METADATA_MOD_DATE =    6,
	}
	[Flags]
	public enum cairo_pdf_outline_flags_t : uint {
		None =                          0,
		CAIRO_PDF_OUTLINE_FLAG_OPEN =   1,
		CAIRO_PDF_OUTLINE_FLAG_BOLD =   2,
		CAIRO_PDF_OUTLINE_FLAG_ITALIC = 4,
	}
	public enum cairo_pdf_version_t : uint {
		CAIRO_PDF_VERSION_1_4 = 0,
		CAIRO_PDF_VERSION_1_5 = 1,
	}
	public enum cairo_ps_level_t : uint {
		CAIRO_PS_LEVEL_2 = 0,
		CAIRO_PS_LEVEL_3 = 1,
	}
	public enum cairo_region_overlap_t : uint {
		CAIRO_REGION_OVERLAP_IN =   0,
		CAIRO_REGION_OVERLAP_OUT =  1,
		CAIRO_REGION_OVERLAP_PART = 2,
	}
	public enum cairo_status_t : uint {
		CAIRO_STATUS_SUCCESS =                    0,
		CAIRO_STATUS_NO_MEMORY =                  1,
		CAIRO_STATUS_INVALID_RESTORE =            2,
		CAIRO_STATUS_INVALID_POP_GROUP =          3,
		CAIRO_STATUS_NO_CURRENT_POINT =           4,
		CAIRO_STATUS_INVALID_MATRIX =             5,
		CAIRO_STATUS_INVALID_STATUS =             6,
		CAIRO_STATUS_NULL_POINTER =               7,
		CAIRO_STATUS_INVALID_STRING =             8,
		CAIRO_STATUS_INVALID_PATH_DATA =          9,
		CAIRO_STATUS_READ_ERROR =                10,
		CAIRO_STATUS_WRITE_ERROR =               11,
		CAIRO_STATUS_SURFACE_FINISHED =          12,
		CAIRO_STATUS_SURFACE_TYPE_MISMATCH =     13,
		CAIRO_STATUS_PATTERN_TYPE_MISMATCH =     14,
		CAIRO_STATUS_INVALID_CONTENT =           15,
		CAIRO_STATUS_INVALID_FORMAT =            16,
		CAIRO_STATUS_INVALID_VISUAL =            17,
		CAIRO_STATUS_FILE_NOT_FOUND =            18,
		CAIRO_STATUS_INVALID_DASH =              19,
		CAIRO_STATUS_INVALID_DSC_COMMENT =       20,
		CAIRO_STATUS_INVALID_INDEX =             21,
		CAIRO_STATUS_CLIP_NOT_REPRESENTABLE =    22,
		CAIRO_STATUS_TEMP_FILE_ERROR =           23,
		CAIRO_STATUS_INVALID_STRIDE =            24,
		CAIRO_STATUS_FONT_TYPE_MISMATCH =        25,
		CAIRO_STATUS_USER_FONT_IMMUTABLE =       26,
		CAIRO_STATUS_USER_FONT_ERROR =           27,
		CAIRO_STATUS_NEGATIVE_COUNT =            28,
		CAIRO_STATUS_INVALID_CLUSTERS =          29,
		CAIRO_STATUS_INVALID_SLANT =             30,
		CAIRO_STATUS_INVALID_WEIGHT =            31,
		CAIRO_STATUS_INVALID_SIZE =              32,
		CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED = 33,
		CAIRO_STATUS_DEVICE_TYPE_MISMATCH =      34,
		CAIRO_STATUS_DEVICE_ERROR =              35,
		CAIRO_STATUS_INVALID_MESH_CONSTRUCTION = 36,
		CAIRO_STATUS_DEVICE_FINISHED =           37,
		CAIRO_STATUS_JBIG2_GLOBAL_MISSING =      38,
		CAIRO_STATUS_PNG_ERROR =                 39,
		CAIRO_STATUS_FREETYPE_ERROR =            40,
		CAIRO_STATUS_WIN32_GDI_ERROR =           41,
		CAIRO_STATUS_TAG_ERROR =                 42,
		CAIRO_STATUS_LAST_STATUS =               43,
	}
	public enum cairo_subpixel_order_t : uint {
		CAIRO_SUBPIXEL_ORDER_DEFAULT = 0,
		CAIRO_SUBPIXEL_ORDER_RGB =     1,
		CAIRO_SUBPIXEL_ORDER_BGR =     2,
		CAIRO_SUBPIXEL_ORDER_VRGB =    3,
		CAIRO_SUBPIXEL_ORDER_VBGR =    4,
	}
	public enum cairo_surface_observer_mode_t : uint {
		CAIRO_SURFACE_OBSERVER_NORMAL =            0,
		CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS = 1,
	}
	public enum cairo_surface_type_t : uint {
		CAIRO_SURFACE_TYPE_IMAGE =           0,
		CAIRO_SURFACE_TYPE_PDF =             1,
		CAIRO_SURFACE_TYPE_PS =              2,
		CAIRO_SURFACE_TYPE_XLIB =            3,
		CAIRO_SURFACE_TYPE_XCB =             4,
		CAIRO_SURFACE_TYPE_GLITZ =           5,
		CAIRO_SURFACE_TYPE_QUARTZ =          6,
		CAIRO_SURFACE_TYPE_WIN32 =           7,
		CAIRO_SURFACE_TYPE_BEOS =            8,
		CAIRO_SURFACE_TYPE_DIRECTFB =        9,
		CAIRO_SURFACE_TYPE_SVG =            10,
		CAIRO_SURFACE_TYPE_OS2 =            11,
		CAIRO_SURFACE_TYPE_WIN32_PRINTING = 12,
		CAIRO_SURFACE_TYPE_QUARTZ_IMAGE =   13,
		CAIRO_SURFACE_TYPE_SCRIPT =         14,
		CAIRO_SURFACE_TYPE_QT =             15,
		CAIRO_SURFACE_TYPE_RECORDING =      16,
		CAIRO_SURFACE_TYPE_VG =             17,
		CAIRO_SURFACE_TYPE_GL =             18,
		CAIRO_SURFACE_TYPE_DRM =            19,
		CAIRO_SURFACE_TYPE_TEE =            20,
		CAIRO_SURFACE_TYPE_XML =            21,
		CAIRO_SURFACE_TYPE_SKIA =           22,
		CAIRO_SURFACE_TYPE_SUBSURFACE =     23,
		CAIRO_SURFACE_TYPE_COGL =           24,
	}
	public enum cairo_svg_unit_t : uint {
		CAIRO_SVG_UNIT_USER =    0,
		CAIRO_SVG_UNIT_EM =      1,
		CAIRO_SVG_UNIT_EX =      2,
		CAIRO_SVG_UNIT_PX =      3,
		CAIRO_SVG_UNIT_IN =      4,
		CAIRO_SVG_UNIT_CM =      5,
		CAIRO_SVG_UNIT_MM =      6,
		CAIRO_SVG_UNIT_PT =      7,
		CAIRO_SVG_UNIT_PC =      8,
		CAIRO_SVG_UNIT_PERCENT = 9,
	}
	public enum cairo_svg_version_t : uint {
		CAIRO_SVG_VERSION_1_1 = 0,
		CAIRO_SVG_VERSION_1_2 = 1,
	}
	[Flags]
	public enum cairo_text_cluster_flags_t : uint {
		None =                             0,
		CAIRO_TEXT_CLUSTER_FLAG_BACKWARD = 1,
	}
	public partial struct cairo_device_t {
	}
	[ExplicitSize( Size = 40 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_font_extents_t {
		[ExplicitOffset( Offset = 0 )]
		public double ascent;
		[ExplicitOffset( Offset = 8 )]
		public double descent;
		[ExplicitOffset( Offset = 16 )]
		public double height;
		[ExplicitOffset( Offset = 24 )]
		public double max_x_advance;
		[ExplicitOffset( Offset = 32 )]
		public double max_y_advance;
	}
	public partial struct cairo_font_face_t {
	}
	public partial struct cairo_font_options_t {
	}
	[ExplicitSize( Size = 24 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_glyph_t {
		[ExplicitOffset( Offset = 0 )]
		public uintptr index;
		[ExplicitOffset( Offset = 8 )]
		public double x;
		[ExplicitOffset( Offset = 16 )]
		public double y;
	}
	[ExplicitSize( Size = 48 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_matrix_t {
		[ExplicitOffset( Offset = 0 )]
		public double xx;
		[ExplicitOffset( Offset = 8 )]
		public double yx;
		[ExplicitOffset( Offset = 16 )]
		public double xy;
		[ExplicitOffset( Offset = 24 )]
		public double yy;
		[ExplicitOffset( Offset = 32 )]
		public double x0;
		[ExplicitOffset( Offset = 40 )]
		public double y0;
	}
	[ExplicitSize( Size = 24 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_path {
		[ExplicitOffset( Offset = 0 )]
		public cairo_status_t status;
		[ExplicitOffset( Offset = 8 )]
		public cairo_path_data_t* data;
		[ExplicitOffset( Offset = 16 )]
		public int num_data;
	}
	[ExplicitSize( Size = 16 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_path_data_t {
		[Overlapped( Offset = 0 )]
		public UnnamedStruct_2245AC81 header;
		[Overlapped( Offset = 0 )]
		public UnnamedStruct_2245AC05 point;
	}
	public partial struct cairo_pattern_t {
	}
	[ExplicitSize( Size = 16 )]
	[Alignment( Boundary = 4 )]
	public partial struct cairo_rectangle_int_t {
		[ExplicitOffset( Offset = 0 )]
		public int x;
		[ExplicitOffset( Offset = 4 )]
		public int y;
		[ExplicitOffset( Offset = 8 )]
		public int width;
		[ExplicitOffset( Offset = 12 )]
		public int height;
	}
	[ExplicitSize( Size = 24 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_rectangle_list_t {
		[ExplicitOffset( Offset = 0 )]
		public cairo_status_t status;
		[ExplicitOffset( Offset = 8 )]
		public cairo_rectangle_t* rectangles;
		[ExplicitOffset( Offset = 16 )]
		public int num_rectangles;
	}
	[ExplicitSize( Size = 32 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_rectangle_t {
		[ExplicitOffset( Offset = 0 )]
		public double x;
		[ExplicitOffset( Offset = 8 )]
		public double y;
		[ExplicitOffset( Offset = 16 )]
		public double width;
		[ExplicitOffset( Offset = 24 )]
		public double height;
	}
	public partial struct cairo_region_t {
	}
	public partial struct cairo_scaled_font_t {
	}
	public partial struct cairo_surface_t {
	}
	public partial struct cairo_t {
	}
	[ExplicitSize( Size = 8 )]
	[Alignment( Boundary = 4 )]
	public partial struct cairo_text_cluster_t {
		[ExplicitOffset( Offset = 0 )]
		public int num_bytes;
		[ExplicitOffset( Offset = 4 )]
		public int num_glyphs;
	}
	[ExplicitSize( Size = 48 )]
	[Alignment( Boundary = 8 )]
	public partial struct cairo_text_extents_t {
		[ExplicitOffset( Offset = 0 )]
		public double x_bearing;
		[ExplicitOffset( Offset = 8 )]
		public double y_bearing;
		[ExplicitOffset( Offset = 16 )]
		public double width;
		[ExplicitOffset( Offset = 24 )]
		public double height;
		[ExplicitOffset( Offset = 32 )]
		public double x_advance;
		[ExplicitOffset( Offset = 40 )]
		public double y_advance;
	}
	[ExplicitSize( Size = 4 )]
	[Alignment( Boundary = 4 )]
	public partial struct cairo_user_data_key_t {
		[ExplicitOffset( Offset = 0 )]
		public int unused;
	}
	[ExplicitSize( Size = 16 )]
	[Alignment( Boundary = 8 )]
	public partial struct UnnamedStruct_2245AC05 {
		[ExplicitOffset( Offset = 0 )]
		public double x;
		[ExplicitOffset( Offset = 8 )]
		public double y;
	}
	[ExplicitSize( Size = 8 )]
	[Alignment( Boundary = 4 )]
	public partial struct UnnamedStruct_2245AC81 {
		[ExplicitOffset( Offset = 0 )]
		public cairo_path_data_type_t type;
		[ExplicitOffset( Offset = 4 )]
		public int length;
	}
}